﻿#include "Mainwindow_viewwidget.h"

#include <QPushButton>
#include <QVBoxLayout>


Mainwindow_viewwidget::Mainwindow_viewwidget(QMainWindow* parent)
	:QMainWindow(parent)
{
	this->setWindowTitle("Model widget");


	this->resize(640, 480);


	init();

}

Mainwindow_viewwidget::~Mainwindow_viewwidget()
{
}

void Mainwindow_viewwidget::init()
{
	layoutinit();
}

void Mainwindow_viewwidget::layoutinit()
{
	//listwidget();

	//tablewidget();

	treewidget();

}

void Mainwindow_viewwidget::listwidget()
{
	m_listwidget = new QListWidget(this);

	//把		m_listwidget	设置成中心窗口：
	this->setCentralWidget(m_listwidget);


	//添加数据：
	m_listwidget->addItems({ "cpp","c","qt","linux","mfc" });
}

void Mainwindow_viewwidget::tablewidget()
{
	m_tablewidget = new QTableWidget(this);

	//把		m_tablewidget	设置成中心窗口：
	this->setCentralWidget(m_tablewidget);

	//设置行数：
	m_tablewidget->setRowCount(10);
	//设置列数：
	m_tablewidget->setColumnCount(10);

	//设置数据：
	for (int i = 0; i < 10; i++)
	{
		for (int k = 0; k < 10; k++)
		{
			m_tablewidget->setItem(i, k, new QTableWidgetItem(QString("%1 %2").arg(i).arg(k)));
		}
	}

	//删除行：
		//1.删除最后一行；
	m_tablewidget->removeRow(m_tablewidget->rowCount() - 1);	
		//2.删除第0行和第1行：
#if 0
	m_tablewidget->removeRow(0);
	m_tablewidget->removeRow(1);
	/*	注意：	这两段代码执行的结果和预期结果是不同的，	由于代码是一行一行的执行，	它先删除掉第0行，删除完后这个表的行和列	会重新排序，
		所以所以再执行第二行代码	删除的不是原来表的第1行，而是原来表的第2行；	*/

#else
	//上面的代码可以改进为：		先删表顺序靠后的数据；
	m_tablewidget->removeRow(1);
	m_tablewidget->removeRow(0);
#endif

	//设置选择行为：
	m_tablewidget->setSelectionBehavior(
		//QTableWidget::SelectionBehavior::SelectRows		//这两个都可以
		QAbstractItemView::SelectRows
		);		//设置整行选中；还有项目选中和整列选中；

	//还有选择模式.....		一般情况下当前选择模式就够用了


	//设置删除行的按钮：
	QPushButton* del_table_rowBtn = new QPushButton;
	del_table_rowBtn->show();

	connect(del_table_rowBtn, &QPushButton::released, this, [this]()
		{
			//获取当前选中的行：
			auto itemlist = this->m_tablewidget->selectedItems();	//可以是很多行；
			QSet<int> index;
			for (auto item : itemlist)
			{
				qInfo() << item->row() << " " << item->column();
				index.insert(item->row());
			}
			qInfo() << index;

			//倒序排序：
				//set容器不能排序，用list：
			QList<int> list(index.begin(), index.end());
			std::sort(list.begin(), list.end(), std::greater<int>());
			qInfo() << list;

			//开始删除：
			for (auto v : list)
			{
				m_tablewidget->removeRow(v);
			}

		});

}

void Mainwindow_viewwidget::treewidget()
{
	m_treewidget = new QTreeWidget(this);

	//把 m_treewidget	设置成中心窗口：
	this->setCentralWidget(m_treewidget);

	auto pitem1 = new QTreeWidgetItem({"Model view_(list,tree,table)view"}, 0);

	pitem1->addChild(new QTreeWidgetItem({ "bin" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "out" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "CMakeLists.txt" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "CMakeSettings.json" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "main.cpp" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "Mainwindow.cpp" }, 1));
	pitem1->addChild(new QTreeWidgetItem({ "Mainwindow.h" }, 1));

	m_treewidget->addTopLevelItem(pitem1);


	auto pitem2 = new QTreeWidgetItem({ "Model view_(list,tree,table)view" }, 0);
	auto item1 = new QTreeWidgetItem({ "bin" }, 1);
	auto item2 = new QTreeWidgetItem({ "out" }, 1);
	auto item3 = new QTreeWidgetItem({ "CMakeLists.txt" }, 1);
	auto item4 = new QTreeWidgetItem({ "CMakeSettings.json" }, 1);
	auto item5 = new QTreeWidgetItem({ "main.cpp" }, 1);
	auto item6 = new QTreeWidgetItem({ "Mainwindow.cpp" }, 1);
	auto item7 = new QTreeWidgetItem({ "Mainwindow.h" }, 1);
	auto item8 = new QTreeWidgetItem({ "QtPro.exe" }, 1);
	auto item9 = new QTreeWidgetItem({ "QtPro.ilk" }, 1);
	auto item10 = new QTreeWidgetItem({ "QtPro.pdb" }, 1);

	pitem2->addChild(item1);
	pitem2->addChild(item2);
	pitem2->addChild(item3);
	pitem2->addChild(item4);
	pitem2->addChild(item5);
	pitem2->addChild(item6);
	pitem2->addChild(item7);

	item1->addChild(item8);
	item1->addChild(item9);
	item1->addChild(item10);

	m_treewidget->addTopLevelItem(pitem2);


}
